import {题目类型} from "./题目类型";
import {ITopic, ITopic_Enum, ITopicView, topic_original} from "./Topic";
import {VNode} from "vue";

export type topic_resolve = {
	id?:string;
	topic: string;
	resolve: string;
}

/**
 * 转为 复杂题目对象 的提前转换
 * 交给 常量 即可,我讨厌 new 对象
 * 它不应该主动 丢弃 字符串 , 而是加入 topic_resolve ,后交给用户去修改
 */
export interface Str分析器 {//解析器 和 题目解析 存在名词冲突,改成分析名词
	/// 单分析 ; null 分析代表失败
	try_analizy(s:string):topic_resolve | null
	/// 多分析 ; null 分析代表失败
	/// 它需要保证 数组是连续的 , 即不存在 [0,2] 缺[1]
	try_analizys(s:string):topic_resolve[] | null
	/// 分析的字符串例子 , 给用户瞅的
	analizys_examplen():string
}

/**
 * 交给 常量 即可,没必要 new 来 new 去
 */
export interface 对象生成器<T extends ITopic<Topic>,Topic extends topic_original> {
	/// 单分析 ; null 分析代表失败
	try_as(s:topic_resolve):T | null
	/// 多分析 ; null 分析代表失败
	/// 它需要保证 数组是连续的 , 即不存在 [0,2] 缺[1]
	try_ass(s:topic_resolve[]):T[] | null
	/// 生成后的样式结果 , 给用户瞅的 , 懒得提供的话 就... 传回一个 h('p',()=>'懒的写') 吧
	as_examplen(): VNode
	itopic_enum:ITopic_Enum
}


/**
 * 文本题目 表里不一 各式各样 .
 * 又没有固定标识位,极其难分析 .
 * 所以需要根据不同的文本来使用不同的解析器 .
 * 事实上,你需要考虑 题目和答案的缺失 ,比如 [1.题目,3.题目],文本缺少[2.题目]
 * 但是 你应该优先保证 题目与答案 分析的正确性,不要出现 [1.题目]<->[2.答案] 对应的情况
 */